package org.example.result;

/**
 * 基础错误码定义
 *
 * @author
 */
public enum BaseErrorCode implements StateCode {

    // ========== 一级宏观错误码 客户端错误 ==========
    CLIENT_ERROR("A000001", "用户端错误"),

    // ========== 二级宏观错误码 用户注册错误 ==========
    USER_REGISTER_ERROR("A000100", "用户注册错误"),
    USER_NAME_VERIFY_ERROR("A000110", "用户名校验失败"),
    USER_NAME_EXIST_ERROR("A000111", "用户名已存在"),
    USER_NAME_SENSITIVE_ERROR("A000112", "用户名包含敏感词"),
    USER_NAME_SPECIAL_CHARACTER_ERROR("A000113", "用户名包含特殊字符"),
    PASSWORD_VERIFY_ERROR("A000120", "密码校验失败"),
    PASSWORD_SHORT_ERROR("A000121", "密码长度不够"),
    PHONE_VERIFY_ERROR("A000151", "手机格式校验失败"),

    // ========== 二级宏观错误码 系统请求缺少幂等Token ==========
    IDEMPOTENT_TOKEN_NULL_ERROR("A000200", "令牌不能为空"),
    IDEMPOTENT_TOKEN_VERIFY_ERROR("A000201", "令牌已过期或验证不正确"),
    IDEMPOTENT_TOKEN_LOGIN_STATUS_EXPIRED("A000202", "登录状态已过期"),
    IDEMPOTENT_TOKEN_LOGIN_ANOTHER_DEVICE("A000203", "该账号已在其他设备登录"),



    // ========== 二级宏观错误码 系统请求缺少登录方式 ==========
    THE_LOGIN_MODE_IS_NOT_ENABLED("A000301", "该登录方式未开通"),

    // ========== 二级宏观错误码 系统请求缺少登录方式 ==========
    PARAMETER_IS_INCORRECT_PLEASE_FILL_IN_AGAIN("A000400", "参数有误, 请重新填写!"),

    INCORRECT_REQUEST_MODE("A000403", "请求方式有误, 请更改"),

    REQUESTED_ADDRESS_IS_INCORRECT_PLEASE_FILL_IN_AGAIN("A000404", "请求地址有误, 请重新填写!"),


    // ========== 一级宏观错误码 系统执行出错 ==========
    SERVICE_ERROR("B000001", "系统执行出错"),
    // ========== 二级宏观错误码 系统执行超时 ==========
    SERVICE_TIMEOUT_ERROR("B000100", "系统执行超时"),

    // ========== 一级宏观错误码 调用第三方服务出错 ==========
    REMOTE_ERROR("C000001", "调用第三方服务出错");

    private final String code;

    private final String message;

    BaseErrorCode(String code, String message) {
        this.code = code;
        this.message = message;
    }

    @Override
    public String code() {
        return code;
    }

    @Override
    public String message() {
        return message;
    }
}
